<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
<script>
    var str = 'hello world';
    console.log(str) //打印语句
    console.log(typeof str) //查看数据类型


    var num = 123;
    var num = 123.123;
    console.log(num)
    console.log(typeof num)

    var bool = true;
    var bool = false;
    console.log(bool)
    console.log(typeof bool)

    //数组用来存放多个值的容器 
    //[key=>value] key索引 value值 索引：数字类型 从0开始
    var arr = ['a','b','c'];
    console.log(arr[0])
    console.log(typeof arr)

    // 对象
    var obj = {
        nickname: 'hello',
        age:20,
        sex:'男'
    };

    console.log(obj.nickname)
    console.log(typeof obj)

    //Null 空 对象 null == 底层就是对象类型
    console.log(null)
    console.log(typeof null)

    //Undefined 未定义 null == false
    var demo; //声明一个变量 但是没有值
    // console.log(undefined)
    console.log(demo)
    console.log(typeof demo)

    //Symbol 是ES6里面的一个新的数据类型 用来表示一个唯一的值
    var sym = Symbol('hello world');
    console.log(sym)
    console.log(typeof sym)

    //转换为字符串类型
    var res = num.toString()
    console.log(res)

    //转换为数值
    console.log(parseInt("12.12")) //转换为整型
    console.log(parseFloat("12.12")) //浮点类型

    //算数运算符 + - * / %
    console.log(1 + 1)
    // % 取模的意思 取余数
    console.log(5 % 2)

    //赋值 + - * / %
    var num = 12; //赋值
    console.log(1 == '1') //判断 值是否相等 true
    console.log(1 === '1') //判断 值和类型都相等 false 
    num+=1;  //num = num + 1
    console.log(num)

    // 后++ -- 或者 前++ --
    //后操作++ -- ：先赋值 在运算
    //前操作 ++ --: 先运算 在赋值
    var x = 2;
    // var y = x++;
    var y = ++x;
    console.log(x,y)

    console.log('----------')

    //比较运算符 > >= < <= != == === !==
    console.log(1 > 2) //false
    console.log(1 >= 2) //false
    console.log(1 < 2) //true
    console.log(1 <= 2) //true
    console.log(1 != 2) //true
    console.log(1 == 2) //false
    console.log(1 === 2) //false
    console.log(1 === 1) //true 
    console.log(1 !== 1) //false 
    console.log(1 !== 2) //true 不全等(值、类型)

    //逻辑 与或非

    //非0的数字都是true 0 就是false
    //与 两个同时为真才返回true 有一个为假就返回false
    console.log(1 > 2 && 2 < 3) // false
    console.log(1 < 2 && 2 < 3) //true

    //逻辑或 只要有一个为真就返回true 
    console.log(1 > 2 || 2 < 3) //true

    //逻辑非 颠倒  真变假 假变真
    console.log(!true) //false


    //逻辑短路
    //逻辑与短路
    // var res = 0 && 6 //逻辑短路
    var res = 6 && 0 //没有短路

    // 逻辑或短路
    var res = 5 || 0 //逻辑短路
    var res = 0 || 5 //没有短路
    console.log(res) //5

    //三元运算符 条件判断
    // var res = (表达式) ? 真 : 假
    var res = 1 < 2 ? '真' : '假'
    console.log(res)


    //条件判断 if else switch
    var os = "windows"

    if(os == "windows")
    {
        console.log('windows系统')
    }else if(os == "linux")
    {
        console.log('linux系统')
    }else
    {
        console.log('其他系统')
    }

    switch(os)
    {
        case "windows":
            console.log('windows系统')
            break;
        case "linux":
            console.log('linux系统')
            break;
        default:
            console.log('其他系统')
    }

    //循环语句
    // while do{}while() for(){} foreach for in for of 
    var i = 0
    while(i < 5)  //先判断 在执行
    {
        console.log(i)
        i++
    }

    i = 0
    //先执行 在判断
    do{
        console.log(i)
        i++
    }while(i < 5)

    //for 综合体
    for(var i = 0; i < 5; i++)
    {
        console.log(i)
    }

    //for in for of ES6里面的语法
    var list = [
        {nickname: '张三', age:20, sex: '男'},
        {nickname: '张三', age:20, sex: '男'},
        {nickname: '张三', age:20, sex: '男'},
        {nickname: '张三', age:20, sex: '男'},
    ]

    //for in 用来循环输出 key 索引下标 值 
    // 0 1 2 3
    console.log('---for in------')

    for(var key in list)
    {
        if(key == 2)
        {
            console.log('key == 2的时候直接跳过')
            // continue; //跳出当前一次的循环 还会进行下一次
            break; //直接终止循环 后面的也不循环了
        }
        // console.log(key)
        // console.log(list[key].nickname)
        // console.log(list[key]['nickname'])
        var nickname = list[key].nickname
        var age = list[key].age
        var sex = list[key].sex

        // console.log("姓名："+nickname+" 年龄："+age+" 性别："+sex)

        //用ES6方式 字符串模板变量
        console.log(`姓名：${nickname} 年龄：${age} 性别：${sex}`)
    }

    console.log('---------')

    //for of 用来循环输出 value 输出是索引对应的值
    for(var item of list)
    {
        console.log(`姓名：${item.nickname} 年龄：${item.age} 性别：${item.sex}`)
    }

    //forEach方法
    list.forEach(function(value, key){
        console.log(`索引：${key}`)
        console.log(value)
    })

    //break continue
</script>